package com.eastfair.imaster.service;

import com.eastfair.boot.service.SuperService;
import com.eastfair.core.base.R;
import com.eastfair.imaster.dto.ConferenceTopicSpeakerDTO;
import com.eastfair.imaster.entity.ConferenceTopicSpeaker;
import com.eastfair.imaster.enumeration.ConferenceTopicSpeakerTypeEnum;
import com.eastfair.imaster.vo.ConferenceTopicSpeakerVO;

import java.util.List;

/**
 * <p>
 * 业务接口
 * 论坛主题嘉宾
 * </p>
 *
 * @author zjn
 * @date 2021-08-31
 */
public interface ConferenceTopicSpeakerService extends SuperService<ConferenceTopicSpeaker> {

    /**
     * 添加论坛主题嘉宾
     *
     * @param conferenceTopicSpeakerDTOList  嘉宾列表
     * @param conferenceTopicId              论坛主题id
     * @param conferenceTopicSpeakerTypeEnum 嘉宾类型
     * @return 是否成功
     */
    R<Boolean> saveConferenceTopicSpeakers(List<ConferenceTopicSpeakerDTO> conferenceTopicSpeakerDTOList, Long conferenceTopicId, ConferenceTopicSpeakerTypeEnum conferenceTopicSpeakerTypeEnum);

    /**
     * 根据论坛主题id嘉宾类别删除嘉宾
     * 当类别为null时删除该论坛主题下所有嘉宾
     *
     * @param conferenceTopicId              论坛主题id
     * @param conferenceTopicSpeakerTypeEnum 嘉宾类型
     * @return 是否成功
     */
    R<Boolean> deleteByConferenceTopicId(Long conferenceTopicId, ConferenceTopicSpeakerTypeEnum conferenceTopicSpeakerTypeEnum);

    /**
     * 通过论坛主题id 嘉宾类型获取嘉宾列表
     *
     * @param conferenceTopicId              论坛主题id
     * @param conferenceTopicSpeakerTypeEnum 嘉宾类型
     * @param sortOrderType                  排序方式
     * @return 嘉宾列表
     */
    R<List<ConferenceTopicSpeakerVO>>getByConferenceTopicId(Long conferenceTopicId, ConferenceTopicSpeakerTypeEnum conferenceTopicSpeakerTypeEnum, String sortOrderType);

    /**
     * 根据论坛主题id嘉宾类别删除嘉宾后新增嘉宾
     *
     * @param conferenceTopicSpeakerDTOList  嘉宾列表
     * @param conferenceTopicId              论坛主题id
     * @param conferenceTopicSpeakerTypeEnum 嘉宾类型
     * @return 是否成功
     */
    R<Boolean> deleteAndSaveByConferenceTopicId(List<ConferenceTopicSpeakerDTO> conferenceTopicSpeakerDTOList, Long conferenceTopicId, ConferenceTopicSpeakerTypeEnum conferenceTopicSpeakerTypeEnum);

}
